package main

import "fmt"

// 定义数学函数的存储map
var operationMap = make(map[string]func(x, y int) int)

// 初始化函数中，注册操作符与数学函数的对应关系
func init() {
	operationMap["+"] = add
	operationMap["-"] = minus
	operationMap["*"] = multiply
	operationMap["/"] = divide
	operationMap["%"] = mod
}

// 加法函数
func add(x, y int) int {
	return x + y
}

// 减法函数
func minus(x, y int) int {
	return x - y
}

// 乘法函数
func multiply(x, y int) int {
	return x * y
}

// 取余函数
func mod(x, y int) int {
	if y == 0 {
		return 0
	}

	return x % y
}

// 除法函数
func divide(x, y int) int {
	if y == 0 {
		return 0
	}
	return x / y
}

// 根据不同的操作符，调用不同的函数
func operate0(operator string, x, y int) int {
	result := 0
	switch operator {
	case "+":
		result = add(x, y)
	case "-":
		result = minus(x, y)
	case "*":
		result = multiply(x, y)
	case "/":
		result = divide(x, y)
	case "%":
		result = mod(x, y)
	}
	return result
}

func operate(operator string, x, y int) int {
	if f, ok := operationMap[operator]; ok {
		return f(x, y)
	}

	return 0
}

func main8() {
	result := operate("+", 10, 20)
	fmt.Println(result)
}
